/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import datos.Programacion;
import java.math.BigDecimal;
import java.util.Date;
import javax.ejb.Local;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */
@Local
public interface GestorProgramacionLocal {

     /***
     * Retorna una lista con todas las instancias de tipo DetalleProgramacion, que posean referencias
     * a una instancia de tipo Programacion, es decir que su id de Programacion coincida con
     * el parametro idProgramacion. En caso contrario retorna Null.
      * @param idObra 
      * @return la lista de los detalles de cada programacion de la obra
     * Interfaz local
     */
    public java.util.List<datos.DetalleProgramacion> verDetalleProgramacionesObra(int idObra);


    /***
     * Actualiza una instancia de tipo Programacion, al encontrar previamente el ID de la
     * Programacion, todos sus atributos. Retorna True si actualiza con exito y False si no actualiza.
     * @param idProgramacion
     * @param periodo
     * @param fecha
     * @param avancePrevisto
     * @param avanceReal
     * @param montoPrevisto
     * @param montoReal
     * @param retraso
     * @param alerta
     * @param motivo
     * @return true si el detalle de la programacion persistió con éxito, false si no persistió
     * Interfaz local
     */
    public boolean modificarProgramacion(int idProgramacion, String periodo, Date fecha, float avancePrevisto, float avanceReal, BigDecimal montoPrevisto, BigDecimal montoReal, float retraso, String alerta, String motivo);


    /***
     * Remueve una instancia de tipo DetalleProgramacion, al encontrar previamente su ID, definido
     * en el parametro idDetalleProgramacion.
     * @param idProgramacion
     * @return true si el detalle de la programación se eliminó con éxito, false si no se eliminó
     * Interfaz local
     */
    public boolean eliminarProgramacion(int idProgramacion);


     /***
     * Agrega una nueva instancia de tipo Programacion, en la BD, al realizar un alta de programacion, con todos sus atributos
     * y referencias a Clases relacionadas. Retorna True en caso de exito y False en caso contrario.
     * @param idObra
     * @param periodo
     * @param fecha
     * @param avancePrevisto
     * @param avanceReal
     * @param montoPrevisto
     * @param montoReal
     * @param retraso
     * @param alerta
     * @param motivo
     * @param tipo
     * @return true si la programacion persistió con éxito, false si no persistió
     * Interfaz local
     */
    public boolean agregarProgramacion(int idObra, String periodo, Date fecha, float avancePrevisto, float avanceReal, BigDecimal montoPrevisto, BigDecimal montoReal, float retraso, String alerta, String motivo, String tipo);


     /***
     * Retorna una lista de motivos pertenecientes a la reprogramacion de la obra con
     * ID igual al parametro idObra.
     * @param idObra
     * @return los motivos de las reprogramaciones de la obra
     * Interfaz local
     */
    public java.util.List<datos.Programacion> verMotivosObra(int idObra);


     /***
     * Modifica una instancia de tipo Programacion al encontrar previamente el ID de la
     * Programacion a actualizar. Retorna True si actualiza con exito la alerta y retraso
     * en Programacion segun datos de los detalles, false si no actualiza.
     * @param p
     * @param acumuladoRetraso
     * @return true si actualiza con exito alerta y retraso en Programacion segun datos de los detalles, false si no actualiza
     * Interfaz local
     */
    public boolean actualizarProgramacion(Programacion p, float acumuladoRetraso);


    /***
     * Retorna la ultima instancia almacenada en la BD de tipo Programacion. Este método me trae
     * la programación actualizada a la GUI, es decir, primera vez muestra la Programación y eventualmente
     * las Reprogramaciones (ultima Programacion).
     * @param idObra
     * @return la última programacion.  Este método me trae la programación actualizada, es decir,
     *  1º vez la Programación y eventualmente las Reprogramaciones.
     * Interfaz local
     */
    public Programacion programacionObra(int idObra);

     /***
     * Almacena una nueva reprogramacion de la Obra.
     * @param idProgramacion
     * @param motivo
     * persiste la reprogramacion
     * Interfaz local
     */
    public void reprogramar(int idProgramacion, String motivo);

    /***
     * Retorna una lista con todas aquellas instancias de Programacion, cuyo id Obra coincida con
     * el parametro idObra. En caso contrario retorna Null.
     * @param idObra
     * @return las programaciones de la obra
     * Interfaz local
     */
    public java.util.List<datos.Programacion> verProgramacionesObra(int idObra);


    /***
     * Agrega una nueva instancia de tipo DetalleProgramacion, en la BD, al realizar un alta de programacion, con todos sus atributos
     * y referencias a Clases relacionadas. Retorna True en caso de exito y False en caso contrario.
     * @param idObra
     * @param periodo
     * @param fecha
     * @param avancePrevisto
     * @param avanceReal
     * @param montoPrevisto
     * @param montoReal
     * @param retraso
     * @param alerta
     * @param motivo
     * @param tipo
     * @param p
     * @return true si el nuevo detalle de la programación persistió con éxito,
     * false si no persistió
     * Interfaz local
     */
    public boolean agregarDetalleProgramacion(int idObra, java.lang.String periodo, java.util.Date fecha, float avancePrevisto, float avanceReal, BigDecimal montoPrevisto, BigDecimal montoReal, float retraso, java.lang.String alerta, java.lang.String motivo, java.lang.String tipo, datos.Programacion p);

    /***
     * Actualiza fechaFin de una instancia de tipo Programacion al encontrar previamente el ID de la
     * Programacion a finalizar. Retorna True si actualiza con exito y False si no actualiza.
     * @param p
     * @return true si actualiza la fecha de fin de la programacion/reprogramacion, y false si no actualiza
     * Interfaz local
     */
    public boolean finProgramacion(datos.Programacion p);

    /***
     * Retorna, si existe, la fechaFin de la ultima instancia almacenada de Programacion, para
     * la Obra con ID igual al parametro idObra.
     * @param idObra
     * @return la fecha de fin de la ultima programacion para esa obra.
     * Interfaz local
     */
    public Date existeFechaFin(int idObra);


    /***
     * Retorna la fecha de la primer instancia de Programacion almacenada
     * en la BD, perteneciente a la Obra con ID igual a idObra.
     * @param idObra
     * @return la menor fecha de creación de la programacion
     * Interfaz local
     */
    public Date fechaCreacion(int idObra);

     /***
     * Retorna una lista con todas las instancias de tipo DetalleProgramacion que tengan
     * una referencia a una instancia de tipo Programacion.
     * @param idProgramacion
     * @return una lista con todas los detalles de programaciones realizados
     * Interfaz local
     */
    public java.util.List<datos.DetalleProgramacion> programacionesObra(int idProgramacion);

     /***
     * Retorna el ultimo motivo de reprogramacion de la obra con ID igual al
     * valor del parametro idObra.
     * @param idObra
     * @return el ultimo motivo de la reprogramacion
     * Interfaz local
     */
    public String programacionesMotivoObra(int idObra) ;

    /***
     * Retorna la instancia de tipo Programacion con ID igual al valor
     * del parametro idProgramacion.
     * @param idProgramacion
     * @return id de la clase Programacion. Interfaz local
     */
    public Programacion traeIdProgramacion(int idProgramacion);

     /***
     * Retorna la ultima fecha de modificacion de las programaciones de la obra
     * con ID igual al valor del parametro idObra.
     * @param idObra
     * @return la ultima fecha de modificacion de las programaciones de la obra
     * Interfaz local
     */
    public Date fechaModificacion(int idObra);
}
